<?
include('../controller/handler.php');

include('../module/var.inc.php');

$hd = new Handler();
$base_url = $hd->getBaseURL();
$changed = false;
$grant = false;

if(isset($_POST['sent_username'])) {
	$grant = $hd->getUsername()==$_POST['username'] || $hd->getMail()==$_POST['username'];
	$hd->writeLog("[PASSWORD] ".strftime("%c")." recovery requested ID=".$_SERVER['REMOTE_ADDR']);
}

if(isset($_POST['sent_pwd'])) {
	if($_POST['password']==$_POST['conf_password'] && $_POST['password']!="") {
		$hd->changePassword(sha1($_POST['password']));
		$hd->writeRecover(0, 0);
		$hd->writeLog("[PASSWORD] ".strftime("%c")." password changed ID=".$_SERVER['REMOTE_ADDR']);
		$changed = true;
	}
}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it" lang="it">
<head>
	<? include('../module/head.inc.php'); ?>
</head>

<body>
<div id="content">
<?include('../module/header.inc.php');?>

<div id="recover">
	<div class="upper_bar_main"><div class="upper_bar_round"></div></div>
	<div class="body_main_left">
	<div class="body_main_right">
	<div class="body_main">
<h2>Cambia Password</h2>
<?
if(isset($_GET['hash']) && time()<$hd->getRecoverTimestamp()+$hd->getRecoverDelay()*3600) {
	// hash is present and the recovery request is not expired
	if($_GET['hash']==$hd->getRecoverHash()) {
		// hash correct - show next step (prompt for a new password)
		?>
		<form action="<?echo $base_url;?>recover" method="post" accept-charset="utf-8" onsubmit="return passwordForm(this);;">
			<input type="password" class="text" name="password" value="" /> Nuova password<br />
			<input type="password" class="text" name="conf_password" value="" /> Conferma Password
			<input type="hidden" name="sent_pwd" value="true" />

			<p><input type="submit" value="Esegui &rarr;"></p>
		</form>
		<?
	} else {
		// hash incorrect - show error
		echo "<p>Impossibile verificare la tua identità, l'hash riportato nell'URL non corrisponde ".
			"a quello inviato nella mail. Verifica che il link per il recupero ".
			"della password sia ancora valido e che non differisca da quello indicato.</p>";
	}
} elseif($changed) {
	// password changed correctly - end of game
	echo "<p>Password cambiata con successo, è ora possibile effettuare il login con la nuova password.</p>";
} else {
	// hash not present or request expired
	if(time()<$hd->getRecoverTimestamp()+$hd->getRecoverDelay()) {
		// hash not present but request not expired
		echo "<p>Mail già inviata. La richiesta di recupero password scadrà fra ".
			(int)(($hd->getRecoverTimestamp()+$hd->getRecoverDelay()-time())/60)." minuti, ".
			"nel frattempo è ancora possibile usare la vecchia password.</p>";
	} else {
		// hash not present and request expired, that is a new request can be done
		if(!$grant) {
			// user not yet authenticated - prompt for his username or mail
			?>
			<form action="recover" method="post" accept-charset="utf-8" onsubmit="return recoveryForm(this);;">
				<input type="text" class="text" name="username" value="" /> Username o mail di amministrazione 
				<?if(isset($_POST['sent_username']) && !$grant) echo " - I dati inseriti non sono corretti";?>
				<input type="hidden" name="sent_username" value="true" />
				<p><input type="submit" value="Continua &rarr;"></p>
			</form>
			<?
		} else {
			// user authenticated - send email (at last)
			$to = "<".$hd->getUsername().">".$hd->getMail();
			$subject = "Philomousia - Recupero password";
			$header = 
				"Content-type: text/html; charset=utf-8\r\n".
				"From: Philomousia<admin@philomousia.it>\r\n".
				"Reply-To: <admin@philomousia.it>\r\n" .
				"X-Mailer: PHP/".phpversion();
			$hash = sha1(rand(0, getrandmax()));
			$hd->writeRecover($hash, time());
			$body = 
				"Premi il link sotto riportato e poi segui le istruzioni per reimpostare la password. ".
				"Se non hai richiesto il recupero della password ignora questa mail, ma ti consiglio ".
				"fortemenete di cambiare username.\n\Saluti\nL'amministratore\n\n\n".
				"http://".$_SERVER['SERVER_NAME'].$base_url."recover/hash:".$hash;
			if(mail($to, $subject, $body, $header)) {
				echo "<p>Mail inviata con successo, segui le istruzioni descritte per reimpostare la password.</p>";
			} else {
				echo "<p>Errore sconosciuto. Impossibile inviare la mail, contattare l'amministratore per ".
					"reimpostare la password di accesso.</p>";
			}
		}
	}
}

?>
	</div></div></div>
	<div class="lower_bar_main"><div class="lower_bar_round"></div></div>
</div>
<? include('../module/footer.inc.php'); ?>
</div>
</body>
</html>
